/**
 * 数据大屏数据解析器
 */

/**
 * 文字(包含万字和人民币符号)转数字
 * 参数: numText: string
 */
export const textToNumber = (numText: string) => {
  let num: any
  // 去除人民币符号
  let tempNum = numText.replace("￥", "")
  // 去除逗号
  tempNum = tempNum.replace(",", "")
  // 检查是否包含万字
  if (tempNum.includes("万")) {
    // 去除万字
    tempNum = tempNum.replace("万", "")
    // 去除万字单位后, 乘以10000，转换为数字
    num = parseFloat(tempNum) * 10000
  } else {
    // 转换为数字
    num = parseFloat(tempNum)
  }
  // 如果num为NaN，说明转换失败，返回0
  if (isNaN(num)) {
    return 0
  }
  return num
}

/**
 * 百分比文字转数字
 * 参数: percentText: string
 */
export const percentTextToNumber = (percentText: string) => {
  // 去除百分号
  let percent = percentText.replace("%", "")
  // 除以100，转换为数字, 保留四位小数
  let num = parseFloat(percent) / 100
  // 如果num为NaN，说明转换失败，返回0
  if (isNaN(num)) {
    return 0
  } else {
    return Number(num.toFixed(4))
  }
}

/**
 * 时间文字转秒数
 * 参数: timeText: string
 * 识别timeText内容，如果单位为小时，分钟，转换为秒数，如果单位为秒，直接转换为数字
 */
export const timeTextToSecond = (timeText: string) => {
  // 如果textText只包含数字，则转换为数字返回
  if (/^\d+$/.test(timeText)) {
    return parseInt(timeText)
  }
  // 构建正则表达式匹配 xxx小时xx分钟|xxx秒|xx分钟|xx小时|xx分钟xx秒  单位包括:小时，分钟，秒，时，分
  // 获取每一个单位的匹配数字结果
  const hour = timeText.match(/(\d+)小时/ || /(\d+)时/)
  const minute = timeText.match(/(\d+)分钟|(\d+)分/)
  const second = timeText.match(/(\d+)秒/)
  // 将hour，minute，second转换为数字，并且hour,minute,second不存在时，赋值为0
  // 将hour,minute转为为秒数
  return (
    (hour ? parseInt(hour[0]) * 60 * 60 : 0) +
    (minute ? parseInt(minute[0]) * 60 : 0) +
    (second ? parseInt(second[0]) : 0)
  )
}

/**
 * 前后端数据结构映射转换
 * 参数: data: { [key: string]: any}
 * 参数: to: "front" | "back"
 */
export const transformDataKey = (
  data: { [key: string]: any },
  to: "front" | "back"
) => {
  // 数据构映射对象, key为前端数据结构key，value为后端数据结构key
  const dataMap = {
    // uv
    uv: "live_uv",
    // pv
    pv: "live_pv",
    // 直播团人数
    liveGroup: "live_fensipai",
    // 新增粉丝数
    newFansCount: "live_addfensi",
    // 人均观看时长
    averageWatchTime: "live_viewtime",
    // 开播时间
    liveStartTime: "live_start_time",
    // 直播时长
    liveTime: "live_duration",
    // 班次id
    classId: "classs",
    // 场次id
    playId: "play",
    // 店铺id
    prefixId: "prefix",
    // 图片
    img: "live_imglist",
    // 创建人id
    creator: "creator"
  }
  // 创建新的数据对象
  let newData: { [key: string]: any } = {}
  // 循环数据
  for (const key in data) {
    // 循环数据映射对象
    for (const mapKey in dataMap) {
      // 如果to为front,则将后端数据结构key转换为前端数据结构key
      if (to === "front") {
        if (key === dataMap[mapKey]) {
          newData[mapKey] = data[key]
        } else {
          // 没有匹配到key，使用原始key
          newData[key] = data[key]
        }
      } else {
        // 如果to为back,则将前端数据结构key转换为后端数据结构key
        if (key === mapKey) {
          newData[dataMap[mapKey]] = data[key]
        } else {
          // 没有匹配到key，使用原始key
          newData[key] = data[key]
        }
      }
    }
  }
  // 返回新的数据对象
  return newData
}
